/**
 * 
 */
package messaage;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class Message {

	protected String type;

	public String toString() {
		XStream xstream = new XStream(new DomDriver());
		String xml = xstream.toXML(this);

		return xml;
	}

	/**
	 * @return the type
	 */
	public String getType() {
		return type;
	}
	public static Message fromString(String xmlString) {
		Message m = null;
		XStream xstream = new XStream(new DomDriver());
		m = (Message) xstream.fromXML(xmlString);
		if (m.getType().equals("AddedForumMsg")) {
			AddedForumMsg tmp = (AddedForumMsg) m;
			return tmp;
		}
		if (m.getType().equals("AddedFriendMsg")) {
			AddedFriendMsg tmp = (AddedFriendMsg) m;
			return tmp;
		}
		if (m.getType().equals("AddedPostMsg")) {
			AddedPostMsg tmp = (AddedPostMsg) m;
			return tmp;
		}
		if (m.getType().equals("AddForumMsg")) {
			AddForumMsg tmp = (AddForumMsg) m;
			return tmp;
		}
		if (m.getType().equals("AddFriendMsg")) {
			AddFriendMsg tmp = (AddFriendMsg) m;
			return tmp;
		}
		if (m.getType().equals("AddPostMsg")) {
			AddPostMsg tmp = (AddPostMsg) m;
			return tmp;
		}
		if (m.getType().equals("ConnectMsg")) {
			ConnectMsg tmp = (ConnectMsg) m;
			return tmp;
		}
		if (m.getType().equals("ConnectedMsg")) {
			System.out.println("connected msg");
			ConnectedMsg tmp = (ConnectedMsg) m;
			return tmp;
		}
		if (m.getType().equals("CreatedThreadMsg")) {
			CreatedThreadMsg tmp = (CreatedThreadMsg) m;
			return tmp;
		}
		if (m.getType().equals("CreateThreadMsg")) {
			CreateThreadMsg tmp = (CreateThreadMsg) m;
			return tmp;
		}
		if (m.getType().equals("DisconnectedMsg")) {
			DisconnectedMsg tmp = (DisconnectedMsg) m;
			return tmp;
		}
		if (m.getType().equals("DisconnectMsg")) {
			DisconnectMsg tmp = (DisconnectMsg) m;
			return tmp;
		}
		if (m.getType().equals("EditedPostMsg")) {
			EditedPostMsg tmp = (EditedPostMsg) m;
			return tmp;
		}
		if (m.getType().equals("EditPostMsg")) {
			EditPostMsg tmp = (EditPostMsg) m;
			return tmp;
		}
		if (m.getType().equals("ErrorMsg")) {
			ErrorMsg tmp = (ErrorMsg) m;
			return tmp;
		}
		if (m.getType().equals("FriendNotifyMsg")) {
			FriendNotifyMsg tmp = (FriendNotifyMsg) m;
			return tmp;
		}
		if (m.getType().equals("GetForumTopicsMsg")) {
			GetForumTopicsMsg tmp = (GetForumTopicsMsg) m;
			return tmp;
		}
		if (m.getType().equals("GetFriendsListMsg")) {
			GetFriendsListMsg tmp = (GetFriendsListMsg) m;
			return tmp;
		}
		if (m.getType().equals("GetListOfForumsMsg")) {
			GetListOfForumsMsg tmp = (GetListOfForumsMsg) m;
			return tmp;
		}
		if (m.getType().equals("GetThreadMsg")) {
			GetThreadMsg tmp = (GetThreadMsg) m;
			return tmp;
		}
		if (m.getType().equals("GotFriendsListMsg")) {
			GotFriendsListMsg tmp = (GotFriendsListMsg) m;
			return tmp;
		}
		if (m.getType().equals("GotFriendsListMsg")) {
			GotFriendsListMsg tmp = (GotFriendsListMsg) m;
			return tmp;
		}
		if (m.getType().equals("GotListOfForumsMsg")) {
			GotListOfForumsMsg tmp = (GotListOfForumsMsg) m;
			return tmp;
		}
		if (m.getType().equals("GotThreadMsg")) {
			GotThreadMsg tmp = (GotThreadMsg) m;
			return tmp;
		}
		if (m.getType().equals("GotTopicsOfForumMsg")) {
			GotTopicsOfForumMsg tmp = (GotTopicsOfForumMsg) m;
			return tmp;
		}
		if (m.getType().equals("LoggedInMsg")) {
			LoggedInMsg tmp = (LoggedInMsg) m;
			return tmp;
		}
		if (m.getType().equals("LoggedOffMsg")) {
			LoggedOffMsg tmp = (LoggedOffMsg) m;
			return tmp;
		}
		if (m.getType().equals("LoginMsg")) {
			LoginMsg tmp = (LoginMsg) m;
			return tmp;
		}
		if (m.getType().equals("LogoutMsg")) {
			LogoutMsg tmp = (LogoutMsg) m;
			return tmp;
		}
		if (m.getType().equals("RegisteredMsg")) {
			RegisteredMsg tmp = (RegisteredMsg) m;
			return tmp;
		}
		if (m.getType().equals("RegisterMsg")) {
			RegisterMsg tmp = (RegisterMsg) m;
			return tmp;
		}
		if (m.getType().equals("RemovedForumMsg")) {
			RemovedForumMsg tmp = (RemovedForumMsg) m;
			return tmp;
		}
		if (m.getType().equals("RemovedFriendMsg")) {
			RemovedFriendMsg tmp = (RemovedFriendMsg) m;
			return tmp;
		}
		if (m.getType().equals("RemovedPostMsg")) {
			RemovedPostMsg tmp = (RemovedPostMsg) m;
			return tmp;
		}
		if (m.getType().equals("RemovedThreadMsg")) {
			RemovedThreadMsg tmp = (RemovedThreadMsg) m;
			return tmp;
		}
		if (m.getType().equals("RemovedUserMsg")) {
			RemovedUserMsg tmp = (RemovedUserMsg) m;
			return tmp;
		}
		if (m.getType().equals("RemoveForumMsg")) {
			RemoveForumMsg tmp = (RemoveForumMsg) m;
			return tmp;
		}
		if (m.getType().equals("RemoveFriendMsg")) {
			RemoveFriendMsg tmp = (RemoveFriendMsg) m;
			return tmp;
		}
		if (m.getType().equals("RemovePostMsg")) {
			RemovePostMsg tmp = (RemovePostMsg) m;
			return tmp;
		}
		if (m.getType().equals("RemoveThreadMsg")) {
			RemoveThreadMsg tmp = (RemoveThreadMsg) m;
			return tmp;
		}
		if (m.getType().equals("RemoveUserMsg")) {
			RemoveUserMsg tmp = (RemoveUserMsg) m;
			return tmp;
		}
		if (m.getType().equals("UpdateThreadMsg")) {
			UpdateThreadMsg tmp = (UpdateThreadMsg) m;
			return tmp;
		}
		if (m.getType().equals("ViewerNotifyMsg")) {
			ViewerNotifyMsg tmp = (ViewerNotifyMsg) m;
			return tmp;
		}
		if (m.getType().equals("AuthorNotifyMsg")) {
			AuthorNotifyMsg tmp = (AuthorNotifyMsg) m;
			return tmp;
		}

		try {
			throw new Exception("Unknown type of message");
		} catch (Exception e) {
		}
		
		return m;
	}
}
